package com._51doit.day01;

import java.util.ArrayList;
import java.util.List;

public class MyList {
    public Integer reduce(ReduceFunction func){
        Integer out = lst.get(0) ;
        for (int i = 1; i < lst.size(); i++) {
            out = func.invoke(out, lst.get(i));
        }
        return out ;
    }
    public List<Integer> filter(FilterFunction func){
        //定义一个新的集合（放新的数据）
        ArrayList<Integer> nList = new ArrayList<>();
        //遍历原来的集合
        for (Integer in : lst) {
            //应用外部传入的计算逻辑（引用）
            boolean out = func.invoke(in);
            //将新的结果添加到新的List中
            if (out)
            nList.add(in);
        }
        //返回新的List
        return nList;
    }
    private List<Integer> lst;

    public MyList(List<Integer> lst) {
        this.lst = lst;
    }

    public List<Integer> map(MapFunction func) {
        //定义一个新的集合（放新的数据）
        ArrayList<Integer> nList = new ArrayList<>();
        //遍历原来的集合
        for (Integer in : lst) {
            //应用外部传入的计算逻辑（引用）
            Integer out = func.invoke(in);
            //将新的结果添加到新的List中
            nList.add(out);
        }
        //返回新的List
        return nList;

    }
}
